package com.roy.hanlpDemo;

import java.util.List;

import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.StandardTokenizer;

public class FileCutter {

	public static void main(String[] args) throws Exception {
//		String line = "小说写一个人、几个人、一群人、或成千成万人的性格和感情。他们的性格和感情从横面的环境中反映出来，从纵面的遭遇中反映出来，从人与人之间的交往与关系中反映出来。长篇小说中似乎只有《鲁滨逊飘流记》，才只写一个人，写他与自然之间的关系，但写到后来，终于也出现了一个仆人“星期五”。只写一个人的短篇小说多些，尤其是近代与现代的新小说，写一个人在与环境的接触中表现他外在的世界、内心的世界，尤其是内心世界。有些小说写动物、神仙、鬼怪、妖魔，但也把他们当作人来写。";
		String str = "小说写一个人、几个人、一群人、或成千成万人的性格和感情。他们的性格和感情从横面的环境中反映出来，从纵面的遭遇中反映出来，从人与人之间的交往与关系中反映出来。长篇小说中似乎只有《鲁滨逊飘流记》，才只写一个人，写他与自然之间的关系，但写到后来，终于也出现了一个仆人“星期五”。只写一个人的短篇小说多些，尤其是近代与现代的新小说，写一个人在与环境的接触中表现他外在的世界、内心的世界，尤其是内心世界。有些小说写动物、神仙、鬼怪、妖魔，但也把他们当作人来写。";
		
//		List<Term> terms = StandardTokenizer.segment(line);
//        StringBuffer sb = new StringBuffer();
//        for(Term term: terms){
//            sb.append(term.word).append(" ");
//        }
//        System.out.println(sb.toString()); 
		
		try {
		    byte[] buff=null;

		    //让我们先看看几种错误的转换,let's go

		    //1. 正常的GBK字节流，你以为是UTF-8，所以用UTF-8去解码...
		    buff=str.getBytes("GBK");//这里只要不抛异常，数据一定不会被破坏
		    String str1=new String(buff,"UTF-8");
		    System.out.println(str1);//这是一种情形:���

		    //2. 正常的UTF-8字节流，你以为是GBK，所以用GBK去解码...
		    buff=str.getBytes("UTF-8");//这里只要不抛异常，数据一定不会被破坏
		    String str2=new String(buff,"GBK");//这里破坏了
		    System.out.println(str2);//这是另外一种情形：

		    //说了半天，锟斤拷在哪里呢？come on

		    //3. 本来正常的GBK字节码，在你不知道的某个环节已经被错误的使用UTF-8解码了
		    String str3=new String(str.getBytes("GBK"),"UTF-8");
		    String str4=new String(str3.getBytes("UTF-8"),"GBK");//这里你并不知道数据已经破坏了，这样用是对的。
		    System.out.println(str4);//锟斤拷

		    /**
		     * Got it.How are you,nice to meet you.
		     *
		     * Why?
		     * 如果说情形1、2是开发者自己造成的，
		     * 那么情形3往往是开发者被坑了，别人造成的（也可能是容器层），总之你拿到的时候已经乱了。
		     */

		    /**
		     * 细心的你会发现，正是情形1的错误，导致了情形3的发生。之所以表现不同，是因为情形1的程序猿是在UTF-8下打印输出；
		     * 而情形3是在GBK下打印输出。
		     */

		    /**
		     * 总结一下，锟斤拷是怎么产生的？
		     *
		     * 源于GBK字符集和Unicode字符集之间的转换问题。
		     * Unicode和老编码体系的转化过程中，肯定有一些字，用Unicode是没法表示的，
		     * Unicode官方用了一个占位符(REPLACEMENT CHARACTER)来表示这些文字，这就是：U+FFFD
		     *
		     * U+FFFD的UTF-8编码出来，恰好是 '\xef\xbf\xbd'。
		     *
		     * 重复多次，例如 '\xef\xbf\xbd\xef\xbf\xbd'，
		     * 然后放到GBK/CP936/GB2312/GB18030的环境中显示的话，
		     * 一个汉字2个字节，最终的结果就是：锟斤拷——锟(0xEFBF)，斤（0xBDEF），拷（0xBFBD）。
		     */
		  } catch (Exception e) {
		    e.printStackTrace();
		  }
	}
	
}
